home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / array / arraysetlen.c < prev    next >
C/C++ Source or Header  |  2001-05-12  |  937b  |  53 lines

  1.  
  2. #include "tek/mem.h"
  3. #include "tek/array.h"
  4.  
  5. /* 
  6. **    TEKlib
  7. **    (C) 2001 TEK neoscientists
  8. **    all rights reserved.
  9. **
  10. **    TBOOL TArraySetLen(TAPTR *mem, TUINT len)
  11. **
  12. **    set array length.
  13. */
  14.  
  15. TBOOL TArraySetLen(TAPTR *memp, TUINT len)
  16. {
  17.     if (memp)
  18.     {
  19.         TUINT newalloclen;
  20.         TARRAY *newarray;
  21.         TARRAY *array = (*((TARRAY **) memp)) - 1;
  22.         if (array)
  23.         {
  24.             if (array->valid)
  25.             {
  26.                 if (len == array->len)
  27.                 {
  28.                     return TTRUE;
  29.                 }
  30.                 
  31.                 if (len > (array->len & ~ARRAY_ALIGNMENT) && len < array->len)
  32.                 {
  33.                     array->len = len;
  34.                     return TTRUE;
  35.                 }
  36.  
  37.                 newalloclen = (len + ARRAY_ALIGNMENT) & ~ARRAY_ALIGNMENT;
  38.                 newarray = TMMURealloc(array->mmu, array, sizeof(TARRAY) + newalloclen * array->size);
  39.                 if (newarray)
  40.                 {
  41.                     newarray->alloclen = newalloclen;
  42.                     newarray->len = len;
  43.                     *memp = (TAPTR) (((TARRAY *) newarray) + 1);
  44.                     return TTRUE;
  45.                 }
  46.                 
  47.                 array->valid = 0;
  48.             }
  49.         }
  50.     }
  51.     return TFALSE;
  52. }
  53.